package j.util.jdbc.simple.core.operations;

import j.data.PagedData;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * simpleJdbc库的数据表查询的基本操作
 * @author 刘军海
 * @version Sep 15, 2011 9:49:18 AM
 */
public interface SimpleJdbcQueryOperations {

	/**
	 * 根据PK进行查询，只查询出来一个结果，若有多个结果，则抛出异常
	 * @param requiredType
	 * @param args key为实体属性名称
	 * @return
	 */
	<T> T findByPk(Connection connection, Class<T> requiredType, Map<String, Object> args)throws SQLException;
	
	/**
	 * 分页、指定排序、条件由args指定，并且在条件中可指定操作符，但条件均以逻辑操作符AND连接
	 * 结果以实体对象返回
	 * @param requiredType 数据表名称将从中获取
	 * @param pageIndex 当前页
	 * @param pageSize 页大小
	 * @param args 参数，将根据此生成where条件，其中key可以指定关系运算及逻辑运算符
	 * @param orders 排序字段，key为排序字段，value为升序或降序，如果指定order以LinkedMap，则排序字段之间是有顺序的
	 * @return
	 */
	<T> PagedData<List<T>> queryList(Connection connection, Class<T> requiredType,
									 int pageIndex, int pageSize,
									 Map<String, Object> args, Map<String, String> orders)throws SQLException;
	
	/**
	 * 不分页获取批量记录，where条件根据args生成，并根据orders进行排序
	 * @param requiredType
	 * @param args
	 * @param orders
	 * @return
	 */
	<T> List<T> queryList(Connection connection, Class<T> requiredType,
						  Map<String, Object> args, Map<String, String> orders)throws SQLException;
	
}
